package com.dfhc.util;

import java.io.File;
import java.util.Date;

import javax.servlet.http.HttpServletRequest;

import org.quickbundle.project.RmGlobalReference;
import org.quickbundle.project.secure.RmCryptoHelper;

import com.dfhc.ISystemConstant;
import com.dfhc.PjException;

/**
 * @description 命令行生成二维码的方法，依赖于qrcode.exe文件。使用前请将qrcode.exe文件放到项目目录
 * 				下的qrcode文件夹内，否则本方法无法使用
 * @author wangkang
 * 
 */
public class QrcodeUtil {
	
	static String QRCODE_EXE = "qrcode.exe";
	
	/**
	 * 获取二维码
	 * @param content 二维码内容
	 * @param 生成
	 * */
	public static String getQrcode(HttpServletRequest request , String content){
		
		String exe = getRealPath(request)+"\\qrcode\\"+QRCODE_EXE;
		
		
		Date date = new Date();
		String filePath = getRootPath() + "qrcode\\"+DateUtil.getDateStr(date, "yyyyMMdd") + "\\";
		
		String filename = filePath + DateUtil.getDateStr(date, "yyyyMMddHHmmssSSS") + ".jpg";
		
		return getQrcode(exe, filename, content);	}
	
	/**
	 * 获取二维码
	 * @param filename 文件名称
	 * @param content 二维码内容
	 * @param 生成
	 * */
	public static String getQrcode(HttpServletRequest request ,String filename, String content){
		
		String exe = getRealPath(request)+"\\qrcode\\"+QRCODE_EXE;
		
		Date date = new Date();
		String filePath = getRootPath() + "qrcode\\"+DateUtil.getDateStr(date, "yyyyMMdd") + "\\";
		
		if(!filename.contains(".")){
			filename = filename+".jpg";
		}
		
		filename = filePath + filename;
		return getQrcode(exe, filename, content);
	}
	
	/**
	 * 完全自定义生成二维码
	 * @param qrcodePath 文件的存储路径
	 * @param filename 完整的文件存储路径
	 * @param content 二维码内容
	 * @param 生成
	 * */
	public static String getQrcode(String qrcodePath, String filename, String content){
		
		Runtime rt = Runtime.getRuntime(); 
		Process ps = null; 
		
		File f1 = new File(filename.substring(0,filename.lastIndexOf("\\")));

		if (!f1.exists()) {
			f1.mkdirs();
		}
		
		//内容加密
		content = RmCryptoHelper.encryptDesBase64(content);
		//内容加密
		
		try {
			ps = rt.exec("cmd.exe /C start /b "+qrcodePath+" -o "+filename+" -s 5 -l H "+content);
			ps.waitFor();
		}catch (Exception e) {
			e.printStackTrace();
			return null;
		} 
		int i = ps.exitValue(); 
		if (i == 0) { 
			System.out.println("二维码生成成功！") ; 
			return filename;
		} else { 
			System.out.println("二维码生成失败！") ;
			return null;
		}
	}
	
	/**
	 * 二维码内容解密
	 * @param content 二维码内容
	 * @return
	 * */
	public static String decrypt(String content){
		if(StringHelper.isEmpty(content)){
			return null;
		}
		return RmCryptoHelper.decryptDesBase64(content);
	}
	
	
	/**
	 * 获取项目根目录
	 * @return
	 */
	public static String getRootPath(){
		String value = RmGlobalReference.get(ISystemConstant.DICTIONARY_PATH, ISystemConstant.DICTIONARY_ROOT_PATH);
		if(StringHelper.isEmpty(value)){
			throw new PjException("根目录参数尚未配置!");
		}else{
			//不是以路径分隔符结束，则连接分隔符
			if(!value.trim().endsWith(File.separator)){
				return value.trim()+File.separator;
			}else{
				return value.trim();
			}
		}
	}
	
	/**
	 * 获取WebContent目录
	 * @return
	 */
	
	public static String getRealPath(HttpServletRequest request){
		return request.getSession().getServletContext().getRealPath("\\"); 
	}
	
	public static void main(String[] args) {
		
	}
	
}
